/* 
 * File:   DProducto.cpp
 * Author: Arturo
 * 
 * Created on November 13, 2010, 7:35 PM
 */

#include "DProducto.h"
#include "Lista.h"

DProducto* DProducto::instancia = NULL;

using namespace std;

DProducto::DProducto() {
    char linea[10000];

    int id;
    string nombre;
    double precio;
    int tipo;
    string artista;
    string formato;
    string plataforma;

    ifstream file("productos.txt");
    if (!file.fail()) {
        
        while (!file.eof()) {
            file.getline(linea, 10000);
            if (linea[0] == '\0') continue;

            id = atoi(strtok(linea, "_"));
            nombre = strtok(NULL, "_");
            precio = atof(strtok(NULL, "_"));
            tipo = atoi(strtok(NULL, "_"));

            switch (tipo) {
                case 1:
                    artista = strtok(NULL, "_");
                    this->Add(new Musica(id, nombre, precio, artista));
                    break;
                case 2:
                    formato = strtok(NULL, "_");
                    this->Add(new Pelicula(id, nombre, precio, formato));
                    break;
                case 3:
                    plataforma = strtok(NULL, "_");
                    this->Add(new Juego(id, nombre, precio, plataforma));
                    break;
            }
        }

        file.close();
    }
}

DProducto::~DProducto() {
}

DProducto &DProducto::GetInstancia() {
    if (instancia == NULL) {
        instancia = new DProducto();
    }

    return *instancia;
}

bool DProducto::Save() {
    // Si la lista esta vacia, retorno que NO he guardado nada.
    if (!this->Head) {
        return false;
    }

    ofstream file;
    file.open("productos.txt");

    this->Reset();

    while(this->Current) {
        file << this->Current->Dato->ToDB() << endl;
        this->Next();
    }
    
    file.close();
    
    this->Reset();

    return true;
}
